﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
using Enums;
using Resources;
using Vallejos.Entidades.Enums;
using Vallejos.Entidades.ModeloDeDatos;
using Vallejos.Excepciones;
using Vallejos.Negocio;

public partial class Seguridad_Perfiles_ModificacionPerfiles : System.Web.UI.Page
{
    private const string PaginaDeBusqueda = "BusquedaPerfiles.aspx";

    #region Eventos
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            CargarCombos();

            var negocio = (NegocioFacade)Session[VariablesDeSesion.NegocioFacade.ToString()];
            
            var perfil = negocio.RecuperarEntidadEnEdicion<Perfil>();
            if (perfil != null)
                CargarPerfil(perfil);
        }
    }

    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
            GuardarPerfil();
    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect(PaginaDeBusqueda);
    }

    protected void ddlAmbito_SelectedIndexChanged(object sender, EventArgs e)
    {
        ddlConcesionaria.Enabled = (IdAmbito)ddlAmbito.SelectedIndex == IdAmbito.Concesionarias;
    }
    #endregion

    #region "Metodos Privados"
    private void CargarPerfil(Perfil perfil)
    {
        ddlAmbito.SelectedIndex = (int)perfil.Ambito.IdAmbito;

        txtNombre.Text = perfil.Nombre;
        txtCodigo.Text = perfil.Codigo;

        if (perfil.Concesionaria != null)
            ddlConcesionaria.SelectedValue = perfil.Concesionaria.Id.ToString();

        ddlConcesionaria.Enabled = (IdAmbito)ddlAmbito.SelectedIndex == IdAmbito.Concesionarias;

        txtDescripcion.Text = perfil.Descripcion;

        foreach (var item in from permiso in perfil.Permisos 
                             from ListItem item in dlPermisos.Items 
                                where Convert.ToInt32(item.Value) == permiso.Id select item)
            item.Selected = true;
    }

    private void GuardarPerfil()
    {
        var negocio = (NegocioFacade)Session[VariablesDeSesion.NegocioFacade.ToString()];

        var perfil = negocio.RecuperarEntidadEnEdicion<Perfil>() ?? new Perfil();

        perfil.Ambito = new Ambito { IdAmbito = (IdAmbito)ddlAmbito.SelectedIndex };
        perfil.Nombre = txtNombre.Text;
        perfil.Codigo = txtCodigo.Text;

        if (ddlConcesionaria.SelectedIndex > 0)
            perfil.Concesionaria = new Concesionaria() { Id = Convert.ToInt32(ddlConcesionaria.SelectedValue) };

        perfil.Descripcion = txtDescripcion.Text;


        perfil.Permisos = new List<Permiso>();
        foreach (var item in dlPermisos.Items.Cast<ListItem>().Where(item => item.Selected))
            perfil.Permisos.Add(new Permiso { Id = Convert.ToInt32(item.Value) });

        try
        {
            negocio.GuardarPerfil(perfil);
            negocio.AlmacenarEntidadEnEdicion<Perfil>(null);
            Response.Redirect(PaginaDeBusqueda);
        }
        catch (ExcepcionNegocio ex)
        {
            var validator = new CustomValidator { IsValid = false, ErrorMessage = ex.Message };
            Page.Validators.Add(validator);
        }
        catch (Exception)
        {
            var validator = new CustomValidator { IsValid = false, ErrorMessage = Resource.ErrorDesconocido };
            Page.Validators.Add(validator);
        }


    }
    #endregion

    #region Combos
    private void CargarCombos()
    {
        CargarAmbitos();
        CargarPermisos();
        Cargarconcesionarias();
    }

    private void Cargarconcesionarias()
    {
        var negocio = (NegocioFacade)Session[VariablesDeSesion.NegocioFacade.ToString()];
        HelperUI.CargarLista(ddlConcesionaria, negocio.LeerConcesionarias(),
            "Id", "RazonSocialNombre");
    }

    private void CargarPermisos()
    {
        var negocio = (NegocioFacade)Session[VariablesDeSesion.NegocioFacade.ToString()];
        HelperUI.CargarLista(dlPermisos, negocio.LeerPermisos(),
            "Id", "Nombre");
    }

    private void CargarAmbitos()
    {
        var negocio = (NegocioFacade)Session[VariablesDeSesion.NegocioFacade.ToString()];
        HelperUI.CargarLista(ddlAmbito,negocio.LeerAmbitos(),
            "IdAmbito","Nombre");
    }
    #endregion

}